package com.hand.cloud.domain.mapper;

import com.hand.cloud.entity.Student;
import com.hand.cloud.dto.StudentVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author 13278
 */
@Mapper
public interface StudentMapper {

    /**
     * 查询学生
     *
     * @param id 学生id
     * @return 学生实体
     */
    Student selectById(Long id);

    /**
     * 根据id删除学生
     *
     * @param id 学生id
     * @return 操作受影响行数
     */
    Integer deleteById(Long id);

    /**
     * 根据 id 查询学生成绩
     *
     * @param id 学生id
     * @return 学生成绩表
     */
    StudentVo selectStudentScoreTableById(Long id);

    /**
     * 查询所有学生的成绩表
     *
     * @return 所有学生的成绩表
     */
    List<StudentVo> selectStudentScoreTableAll();

    /**
     * 修改学生信息
     *
     * @param student 学生实体，必定包含 id
     * @return 受影响行数
     */
    Integer updateStudent(Student student);

    /**
     * 插入一个学生
     *
     * @param student 学生对象
     */
    void insertStudent(Student student);

    /**
     * 批量插入
     *
     * @param students 学生实体集合
     */
    void insertBatch(List<Student> students);

    /**
     * 查询所有学生
     *
     * @return 学生集合
     */
    List<Student> selectAll();

    /**
     * 根据姓名查询学生
     *
     * @param name 姓名
     * @return 查询结果集合
     */
    List<Student> selectByName(String name);

    /**
     * 给某个学生添加成绩
     *
     * @param studentId 学生 id
     * @param courseId  课程 id
     * @param score     成绩
     * @return 受影响行数
     */
    int insertScore(@Param("studentId") long studentId, @Param("courseId") long courseId, @Param("score") double score);

    /**
     * 批量插入学生成绩
     *
     * @param scores 学生成绩
     * @return 受影响行数
     */
    int insertScoreBeach(List<Map<String, Object>> scores);
}
